package com.ray.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.CompanyMaterialTableBean;
import com.ray.bean.OrderInfoDetailBean;
import com.ray.bean.PurchaseDetailBean;
import com.ray.bean.PurchaseOrderDetailBean;
import com.ray.bean.UserBean;
import com.ray.bean.WarehouseInOutDetailBean;
import com.ray.bean.WarehouseInSumMoneyBean;

public interface CompanyMaterialMapper {

	//获取所有的供应商
	List<String> getProviderName(Map map);

	//获取采购人员
	List<UserBean> getPurchasePeople(Map map);

	//获取采购订单编号 
	List<String> getPurchaseId(Map map);
 
	//获取采购单物料条数
	int getPurchaseMaterialDateCount(Map map);

	//获取采购单物料信息
	List<CompanyMaterialTableBean> getPurchaseMaterialDate(Map map);

	//获取采购单物料信息(不分页)
	List<PurchaseDetailBean> getPurchaseOrderDetail(Map map);

	//修改入库数量
	void updatePurchaseDetail(Map map);

	//修改物料库存
	void updateCompanyMaterialTable(Map map);
	
	//更新库存及修改人和修改日期  at 2018-04-09 by 李斌 
	void updateCompanyMaterialTableOnCountAndTime(Map map);

	//保存物料信息
	int  insertInOutRecode(@Param("inOutList")List<WarehouseInOutDetailBean> inOutList);

	//根据供应商查询物料信息 
	List<String> getMaterialTypeByProviderName(Map map);

	//获取物料信息条数
	int getMaterialDateCount(Map map);

	//获取物料信息详情
	List<CompanyMaterialTableBean> getMaterialDate(Map map);

	//获取选中的物料信息
	List<CompanyMaterialTableBean> getCheckMaterialTable(Map map);

	//获取出入库数据条数
	int getInWarehourseNotApprovalDataCount(Map map);

	//获取出入库数据
	List<WarehouseInOutDetailBean> getInWarehourseNotApproval(Map map);

	//通过id集合批量查找出入库数据
	List<WarehouseInOutDetailBean> getInWarehourseById(Map map);

    //通过物料代码获取物料信息
	CompanyMaterialTableBean getupdateCompanyMaterialByCode(Map map);

	//修改出入库记录
	void updateWarehouseInOut(Map map);
 
	//通过id获取一条记录
	WarehouseInOutDetailBean getInWarehourseByIdOne(@Param("id")String id);

	//获取一条记录
	PurchaseDetailBean getPurchaseOrderDetailOne(Map map);

	//修改采购明细
	void updatePurchaseDetailOne(@Param("purchaseDetail")PurchaseDetailBean cmtb);

	//修改出入库数量
	void updateWarehouseInOutCount(Map map);

	//删除出入库明细
	void deletePurchaseDetail(Map map);

	//通过物料代码获取物料信息
	CompanyMaterialTableBean getCompanyMaterialTableOne(String materialCode, String loginCompany);
	/**
	 * 通过上传文件添加公司物料表 by 李斌
	 * @param companyMaterialList
	 * @return
	 */
	int addWarehouseByFile(List<CompanyMaterialTableBean> companyMaterialList);

    //通过bean获取物料信息
	List<CompanyMaterialTableBean> getCompanyMaterialByBean(CompanyMaterialTableBean xx);

	//通过map
	List<CompanyMaterialTableBean> getCompanyMaterialByMap(Map map);
	/**
	 * 通过purchaseDetailId获取PurchaseOrderDetail
	* @date 2018年4月13日 下午6:28:07 
	* @author 李斌
	* @return void 
	* @throws
	 */
	PurchaseOrderDetailBean getPurchaseOrderDetailByPurchaseDetailId(String purchaseDetailId);
	/**
	 * 批量修改投料单采购单对应表
	* @date 2018年4月13日 下午7:07:45 
	* @author 李斌
	* @return void 
	* @throws
	 */ 
	void updatePurchaseOrderDetail(@Param("purchaseOrderDetailList")List<PurchaseOrderDetailBean> podbList);
	
	/**
	 * 获取投料单采购单对应表通过Id
	* @date 2018年4月14日 上午9:09:50 
	* @author 李斌
	* @return PurchaseOrderDetailBean 
	* @throws
	 */
	PurchaseOrderDetailBean getPurchaseOrderDetailById(String pruchaseOrderDetailId);
	
	/**
	 * 通过采购单主表id和物料代码获取采购单明细表
	* @date 2018年4月14日 下午5:10:21 
	* @author 李斌
	* @return void 
	* @throws
	 */
	PurchaseDetailBean getPurchaseDetailByMainIdAndMaterialCode(PurchaseDetailBean purchaseDetail);
	
	/**
	 * 批量修改采购单明细表
	* @date 2018年4月15日 上午7:53:21 
	* @author 李斌
	* @return void 
	* @throws
	 */
	void updatePurchaseDetailOnDetail(Map map);

	//通过id获取采购单明细 库存采购单
	PurchaseDetailBean getPurchaseDetailById(String purchaseDetailId);
	
	/**
	 * 获取订单编号用于采购单入库
	* @date 2018年4月18日 下午6:59:58 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<String> getOrderIdOnWarehouseIn(Map map);
	
	/**
	 * 获取工厂型号用于采购单入库
	* @date 2018年4月18日 下午7:35:06 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */ 
	List<String> getFactoryNoOnWarehouseIn(Map map);
	
	/**
	 * 获取客户型号用于采购单入库
	* @date 2018年4月18日 下午7:44:14 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */ 
	List<String> getArticleNoOnWarehouseIn(Map map);

	//审批单个
	void updateWarehouseInOutOne(Map map);

	//通过map查询公司物料信息
	List<CompanyMaterialTableBean> getVagueCompanyMaterialByMap(Map map);

	//获取物料条数
	int getVagueCompanyMaterialByMapCount(Map map);

	//修改投料单明细领料数
	void updateFeedOrderDetailReceive(Map paramMap);

	
	List<CompanyMaterialTableBean> getCompanyMaterialByMapToPage(Map map);

	int getCompanyMaterialByMapToPageCount(Map map);

	/**
	 * 通过物料代码获取出入库明细
	* @date 2018年5月16日 下午8:03:06 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseInOutByMaterialCode(Map<String, Object> map);
	
	//获取待处理仓和报废仓的出入库信息
	List<WarehouseInOutDetailBean> getOtherWarehouseMateiral(Map<String, Object> map); 
	
	/**
	 * 更新物料的单价
	* @date 2018年6月11日 下午2:44:18 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int updateCompanyMaterialOnUnitPrice(CompanyMaterialTableBean companyMaterialTableBean);
	/**
	 * 获取source为2/3的出入库信息
	* @date 2018年6月19日 上午7:37:32 
	* @author 李斌
	* @return List<CompanyMaterialTableBean> 
	* @throws
	 */
	List<CompanyMaterialTableBean> getOtherWarehouseBySource(Map<String, Object> map);
	

	CompanyMaterialTableBean getCompanyMaterialTableByMaterialCode(Map<String, Object> map);
	
	//查询出入库信息,未审核
	List<WarehouseInOutDetailBean> getWarehouseInOutByMaterialCodeAndNotStatus(Map<String, Object> paramMap);
	
	//查询公司供应商和商城的公司
	List<Map> getProviderNameAndShoppingCallCompany(Map map);

	/**
	 * 获取无订单发料可以退回数量
	 * @param materialCode
	 * @param workShopId
	 * @return
	 */
	Double getNoOrderCanReturnCount(@Param("materialCode")String materialCode, @Param("workShopId")String workShopId);
	/**
	 * //有物料代码 就仅仅更新供方编号 仅用于投料单
	 * @param map
	 */
	void updateCompanyMaterialByCodeForFeedOrder(OrderInfoDetailBean bean);

	WarehouseInOutDetailBean getInWarehourseByOtherIdOne(@Param("otherId")String id);

	/**
	 * 设置分期付款信息（时间和金额）
	 * @param warehouseInOutDetailBean
	 * @return
	 */
	int setStagesDetail(@Param("warehouseInOutDetailBean")WarehouseInOutDetailBean warehouseInOutDetailBean);

	/**
	 * 获取本月
	 * @return
	 */
	List<WarehouseInSumMoneyBean> getAllThisMonthStages();

	/**
	 * 设置出入库分期信息
	 * @param warehouseInSumMoneyBeans
	 */
	void setInOutStageDateil(@Param("list")List<WarehouseInSumMoneyBean> warehouseInSumMoneyBeans);
	  

}
